/**
 * 设置模块
 * 管理应用设置和用户偏好
 */

import { applyThemeToPage } from '@/utils/themeUtils.js'

export const settingsModule = {
	namespaced: true,
	state: {
		// 通知设置
		notifications: {
			enabled: true,
			scheduleReminderMinutes: 30 // 日程提醒时间（分钟）
		},
		
		// 显示设置（这些设置已从UI中移除，但保留在store中以防API依赖）
		display: {
			theme: 'light', // light, dark, auto - 已从设置页面移除
			fontSize: 'medium', // small, medium, large - 已从设置页面移除
			showCompleted: true // 是否显示已完成的日程 - 已从设置页面移除
		},
		
		// 默认设置
		defaults: {
			priority: 'medium', // 新建日程的默认优先级
			tags: ['工作', '生活', '学习', '健康', '娱乐'] // 预设标签
		},
		
		// 数据设置
		data: {
			autoBackup: true, // 自动备份
			backupFrequency: 'daily', // daily, weekly, monthly
			lastBackupTime: null
		}
	},
	
	getters: {
		// 获取提醒时间选项（统一使用日程提醒时间选项）
		reminderOptions: (state) => {
			return [
				{ value: 15, label: '15分钟前' },
				{ value: 30, label: '30分钟前' },
				{ value: 60, label: '1小时前' },
				{ value: 120, label: '2小时前' },
				{ value: 1440, label: '1天前' }
			]
		},
		
		// 获取优先级选项
		priorityOptions: () => {
			return [
				{ value: 'low', label: '低', color: '#6B7280' },
				{ value: 'medium', label: '中', color: '#6366F1' },
				{ value: 'high', label: '高', color: '#F59E0B' },
				{ value: 'urgent', label: '紧急', color: '#EF4444' }
			]
		},
		
		// 获取主题选项
		themeOptions: () => {
			return [
				{ value: 'light', label: '浅色模式' },
				{ value: 'dark', label: '深色模式' },
				{ value: 'auto', label: '跟随系统' }
			]
		}
	},
	
	mutations: {
		// 设置通知配置
		SET_NOTIFICATIONS(state, notifications) {
			state.notifications = { ...state.notifications, ...notifications }
		},
		
		// 设置显示配置
		SET_DISPLAY(state, display) {
			state.display = { ...state.display, ...display }
		},
		
		// 设置默认配置
		SET_DEFAULTS(state, defaults) {
			state.defaults = { ...state.defaults, ...defaults }
		},
		
		// 设置数据配置
		SET_DATA(state, data) {
			state.data = { ...state.data, ...data }
		},
		
		// 添加自定义标签
		ADD_TAG(state, tag) {
			if (!state.defaults.tags.includes(tag)) {
				state.defaults.tags.push(tag)
			}
		},
		
		// 删除标签
		REMOVE_TAG(state, tag) {
			const index = state.defaults.tags.indexOf(tag)
			if (index > -1) {
				state.defaults.tags.splice(index, 1)
			}
		},
		
		// 更新备份时间
		UPDATE_BACKUP_TIME(state) {
			state.data.lastBackupTime = new Date().toISOString()
		}
	},
	
	actions: {
		// 加载设置
		async loadSettings({ commit, dispatch }) {
			try {
				const data = uni.getStorageSync('settings')
				if (data) {
					const settings = JSON.parse(data)
					commit('SET_NOTIFICATIONS', settings.notifications || {})
					commit('SET_DISPLAY', settings.display || {})
					commit('SET_DEFAULTS', settings.defaults || {})
					commit('SET_DATA', settings.data || {})
				}
				
				// 应用主题设置
				await dispatch('applyTheme')
			} catch (error) {
				console.error('加载设置失败:', error)
			}
		},
		
		// 应用主题
		async applyTheme({ state }) {
			try {
				const actualTheme = applyThemeToPage(state.display.theme)
				return actualTheme
			} catch (error) {
				console.error('应用主题失败:', error)
				return 'light'
			}
		},
		
		// 保存设置
		async saveSettings({ state }) {
			try {
				uni.setStorageSync('settings', JSON.stringify(state))
			} catch (error) {
				console.error('保存设置失败:', error)
			}
		},
		
		// 更新通知设置
		async updateNotifications({ commit, dispatch }, notifications) {
			commit('SET_NOTIFICATIONS', notifications)
			await dispatch('saveSettings')
		},
		
		// 更新显示设置
		async updateDisplay({ commit, dispatch }, display) {
			commit('SET_DISPLAY', display)
			await dispatch('saveSettings')
			
			// 如果更新了主题，立即应用
			if (display.theme !== undefined) {
				await dispatch('applyTheme')
			}
		},
		
		// 更新默认设置
		async updateDefaults({ commit, dispatch }, defaults) {
			commit('SET_DEFAULTS', defaults)
			await dispatch('saveSettings')
		},
		
		// 重置设置
		async resetSettings({ commit, dispatch }) {
			// 重置为默认值
			commit('SET_NOTIFICATIONS', {
				enabled: true,
				scheduleReminderMinutes: 30
			})
			commit('SET_DISPLAY', {
				theme: 'light',
				fontSize: 'medium',
				showCompleted: true
			})
			commit('SET_DEFAULTS', {
				priority: 'medium',
				tags: ['工作', '生活', '学习', '健康', '娱乐']
			})
			commit('SET_DATA', {
				autoBackup: true,
				backupFrequency: 'daily',
				lastBackupTime: null
			})
			await dispatch('saveSettings')
		},
		
		// 数据备份
		async backupData({ commit, rootState }) {
			try {
				const backupData = {
					schedules: rootState.schedule.schedules,
					settings: rootState.settings,
					timestamp: new Date().toISOString()
				}
				
				// 保存到本地
				uni.setStorageSync('backup_data', JSON.stringify(backupData))
				commit('UPDATE_BACKUP_TIME')
				
				uni.showToast({
					title: '备份成功',
					icon: 'success'
				})
			} catch (error) {
				console.error('备份失败:', error)
				uni.showToast({
					title: '备份失败',
					icon: 'error'
				})
			}
		},
		
		// 恢复数据
		async restoreData({ dispatch }) {
			try {
				const backupData = uni.getStorageSync('backup_data')
				if (!backupData) {
					uni.showToast({
						title: '没有备份数据',
						icon: 'none'
					})
					return
				}
				
				const data = JSON.parse(backupData)
				
				// 恢复日程数据
				await dispatch('schedule/loadSchedules', null, { root: true })
				
				// 恢复设置数据
				await dispatch('loadSettings')
				
				uni.showToast({
					title: '恢复成功',
					icon: 'success'
				})
			} catch (error) {
				console.error('恢复失败:', error)
				uni.showToast({
					title: '恢复失败',
					icon: 'error'
				})
			}
		}
	}
} 